/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package juego;

/**
 * @author VIC
 */
abstract class Industria extends Construccion implements IasignarTrabajo{
//xekear indice validad entradas fuera de mapa
	private int estado;
	private int tiempoInicio;
	abstract public void mostrar();
	abstract public void recolectar();


        public abstract char getSimbolo();

	public Industria(){
		estado=-1;
		tiempoInicio=0;
	}
	public int getEstado(){
		return estado;
	}
	public void setEstado(int estado){
		this.estado=estado;
	}
	public int getTiempoInicial(){
		return tiempoInicio;
	}
	public void setTiempoInicio(int tiempoInicio){
		this.tiempoInicio=tiempoInicio;
	}
	public static void mostrarIndustria(){
            System.out.print("[1]PozoPetrolero ");
            System.out.println(" Precio: " + PozoPetrolero.precio[0]);
            System.out.print("[2] Granja ");
            System.out.println(" Precio: " + Granja.precio[0]);
            System.out.print("[3] MinaDeMinerales ");
            System.out.println(" Precio: " + MinaDeMinerales.precio[0]);
            System.out.print("[4] Aserradero ");
            System.out.println(" Precio: " + Aserradero.precio[0]);
	}

}
//---------------------------------------------
class tiposIndustria{
	private int []precio;
	private int []produccion;
	private int nivel;
	private String nombre;
	private int duracion;

	public tiposIndustria(int gasto,int gold,int silver,int madera,int petroleo,int nivel,String nombre,int duracion){
		precio=new int [4];
		precio[0]=gasto;
		precio[1]=0;
		precio[2]=0;
		precio[3]=0;
		produccion=new int [4];
		produccion[0]=gold;
		produccion[1]=silver;
		produccion[2]=madera;
		produccion[3]=petroleo;
		this.nombre=nombre;
		this.duracion=duracion;
		this.nivel=nivel;
	}
	public int [] getPrecio(){
		int []aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}

	public int []getProduccion(){
		int []aux=new int [produccion.length];
		for(int i=0;i<produccion.length;i++) aux[i]=produccion[i];
		return aux;
	}
	public int getNivel(){return nivel;}
	public int getDuracion(){return duracion;}
	public String getNombre(){return nombre;}
	public void imprimir(){
		System.out.println();
		System.out.println("Nombre "+nombre );
		System.out.println("Nivel requerido " +nivel);
		System.out.println("Duracion "+ duracion);
		System.out.println("Precio "+ precio[0]+" de gold ");
		System.out.print("Produce ");
		if(produccion[0]!=0 ) System.out.println(produccion[0]+" de gold");
		else if(produccion[1]!=0) System.out.println(produccion[1]+" de silver");
		else if(produccion[2]!=0) System.out.println(produccion[2]+" de madera" );
		else if(produccion[3]!=0) System.out.println(produccion[3]+" de petroleo");
	}
}
//----------------------
class PozoPetrolero extends Industria {
	public static int precio []={100,0,0,0};
	private static tiposIndustria []atipos;
	private static int longx=2;
	private static int longy=2;
        private char simbolo = 'O';

        public char getSimbolo(){
            return simbolo;
        }
	static{
		atipos=new tiposIndustria[5];
		atipos[0]=new tiposIndustria(20,0,0,0,30,0,"p1",5);
		atipos[1]=new tiposIndustria(50,0,0,0,100,2,"p2",10);
		atipos[2]=new tiposIndustria(70,0,0,0,150,4,"p3",13);
		atipos[3]=new tiposIndustria(100,0,0,0,200,6,"p4",17);
		atipos[4]=new tiposIndustria(200,0,0,0,400,8,"p5",22);
	}
	public PozoPetrolero (){
		super();

	}

	public void mostrar(){
		System.out.println("--------------");
		System.out.println("Pozo Petrolero");
		if(getEstado()==-1)
			for(int i=0;i<atipos.length;i++) atipos[i].imprimir();
		else
			System.out.println("Se esta realizando un trabajo faltan "+(getTiempoInicial()+atipos[getEstado()].getDuracion() - Juego.turno) + " turnos");
	}

	public static int [] getPrecio(){
		int [] aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}

	public void asignarTrabajo(int trabajo){
		Juego.gold-=atipos[trabajo].getPrecio()[0];
		setEstado(trabajo);
		Juego.energia--;
		setTiempoInicio(Juego.turno);
	}

	public void recolectar(){
		Juego.petroleo+=atipos[getEstado()].getProduccion()[3];
		setEstado(-1);
                Juego.energia--;
		Juego.experiencia++;
	}
	public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
        public int getDuracion(){
            return atipos[getEstado()].getDuracion();
        }
}
//----------------------------------
class Granja extends Industria{
	public static int precio []={150,0,0,0};
	private static tiposIndustria [] atipos;
	private static int longx=3;
	private static int longy=2;
        public static char representacion;
        private char simbolo='G';

        public char getSimbolo(){
            return simbolo;
        }
	static{
		atipos=new tiposIndustria[5];
		atipos[0]=new tiposIndustria(20,0,0,0,30,0,"p1",5);
		atipos[1]=new tiposIndustria(50,0,0,0,100,2,"p2",8);
		atipos[2]=new tiposIndustria(70,0,0,0,150,4,"p3",12);
		atipos[3]=new tiposIndustria(100,0,0,0,200,6,"p4",15);
		atipos[4]=new tiposIndustria(200,0,0,0,400,8,"p5",20);
                representacion='G';
	}
	public Granja (){
		super();
	}

	public void mostrar(){
		System.out.println("-------");
		System.out.println("Granja");
		if(getEstado()==-1)
			for(int i=0;i<atipos.length;i++) atipos[i].imprimir();
		else
			System.out.println("Se esta realizando un trabajo faltan "+(getTiempoInicial()+atipos[getEstado()].getDuracion() - Juego.turno) + " turnos");
	}

	public static int [] getPrecio(){
		int [] aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}

	public void asignarTrabajo(int trabajo){
		Juego.gold-=atipos[trabajo].getPrecio()[0];
		setTiempoInicio(Juego.turno);
		Juego.energia--;
		setTiempoInicio(Juego.turno);
	}

	public void recolectar(){
		Juego.gold+=atipos[getEstado()].getProduccion()[0];
		setEstado(-1);
		Juego.experiencia++;
	}
	public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
        public int getDuracion(){
            return atipos[getEstado()].getDuracion();
        }
}
//---------------------
class MinaDeMinerales extends Industria{

	public static int precio []={200,0,0,0};
	private static tiposIndustria [] atipos;
	private static int longx=3;
	private static int longy=3;
        public static final char representacion;
        private char simbolo= 'L';

        public char getSimbolo(){
            return simbolo;
        }
	static{
		atipos=new tiposIndustria[5];
		atipos[0]=new tiposIndustria(20,0,0,0,10,0,"p1",5);
		atipos[1]=new tiposIndustria(80,0,0,0,30,2,"p2",8);
		atipos[2]=new tiposIndustria(100,0,0,0,50,4,"p3",12);
		atipos[3]=new tiposIndustria(150,0,0,0,100,6,"p4",17);
		atipos[4]=new tiposIndustria(200,0,0,0,200,8,"p5",22);
                representacion='L';
	}
	public MinaDeMinerales(){
		super();
	}

	public int tiempoParaRecolectar(){
		return getTiempoInicial()+atipos[getEstado()].getDuracion()-Juego.turno;
	}

	public void mostrar(){
		System.out.println("-----------------");
		System.out.println("Mina de Minerales");
		if(getEstado()==-1)
			for(int i=0;i<atipos.length;i++) atipos[i].imprimir();
		else
			System.out.println("Se esta realizando un trabajo faltan "+(getTiempoInicial()+atipos[getEstado()].getDuracion() - Juego.turno) + " turnos");
	}

	public static int [] getPrecio(){
		int [] aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}

	public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}

	public void asignarTrabajo(int trabajo){
            trabajo--;
		Juego.gold-=atipos[trabajo].getPrecio()[0];
		setTiempoInicio(Juego.turno);
		Juego.energia--;
		setTiempoInicio(Juego.turno);
	}

	public void recolectar(){
		Juego.silver+=atipos[getEstado()].getProduccion()[1];
		setEstado(-1);
		Juego.experiencia++;
	}
        public int getDuracion(){
            return atipos[getEstado()].getDuracion();
        }
}
//---------------------
class Aserradero extends Industria{

	public static int precio []={100,0,0,0};
	private static tiposIndustria [] atipos;
	private static int longx=2;
	private static int longy=2;
        public static char representacion;
        private char simbolo = 'D';

        public char getSimbolo(){
            return simbolo;
        }
	static{
		atipos=new tiposIndustria[5];
		atipos[0]=new tiposIndustria(20,0,0,0,30,0,"p1",3);
		atipos[1]=new tiposIndustria(50,0,0,0,100,2,"p2",6);
		atipos[2]=new tiposIndustria(70,0,0,0,150,4,"p3",10);
		atipos[3]=new tiposIndustria(100,0,0,0,200,6,"p4",15);
		atipos[4]=new tiposIndustria(200,0,0,0,400,8,"p5",22);
                representacion='D';
	}
	public Aserradero (){
		super();
	}

	public void mostrar(){
		System.out.println("-----------");
		System.out.println("Aserradero");
		if(getEstado()==-1)
			for(int i=0;i<atipos.length;i++) atipos[i].imprimir();
		else
			System.out.println("Se esta realizando un trabajo faltan "+(getTiempoInicial()+atipos[getEstado()].getDuracion() - Juego.turno) + " turnos");
	}

	public static int [] getPrecio(){
		int [] aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}

	public void asignarTrabajo(int trabajo){
		Juego.gold-=atipos[trabajo].getPrecio()[0];
		setTiempoInicio(Juego.turno);
		Juego.energia--;
		setTiempoInicio(Juego.turno);
	}

	public void recolectar(){
		Juego.madera+= atipos[getEstado()].getProduccion()[2];
		setEstado(-1);
		Juego.experiencia++;
	}
	public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
        public int getDuracion(){
            return atipos[getEstado()].getDuracion();
        }
}
